package com.beone.admin.api.user;

import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.base.common.util.httpclient.BaseHttpClientUtils;
import com.beone.admin.config.HunnuEduConfig;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * @title  获取师大学工及单位/部门信息
 *              下列接口需在师大开放平台 -》 服务管理  -》 业务-机构服务(服务管理) -》【用户管理、机构管理】 相应接口必须 审核通过
 * @Author 覃球球
 * @Version 1.0 on 2018/11/9.
 * @Copyright 贝旺科技
 */
@Component
public class HunnuUserOrgsRestClient {
    private static final String CATALOG_STAFF_ON_THE_JOB = "Z-11";  //在职
    private static final String CATALOG_STAFF_RETIREMENT = "Z-2h"; //离退休
    private static final String CATALOG_STUDENT_UNDERGRADUATE = "Z-1k"; //本科生
    private static final String catalog_student_graduate = "Z-1l"; //研究生

    @Autowired
    private HunnuEduConfig eduConfig;

    public void setEduConfig(HunnuEduConfig eduConfig) {
        this.eduConfig = eduConfig;
    }

    /**
     * 获取部门信息
     *      { name ：部门名称, code : 部门编码 }
     * @param orgids
     * @return
     */
    public JSONArray getOrgInfo(List orgids){
        JSONArray array = new JSONArray();
        if(CollectionUtils.isEmpty(orgids)){
            return array;
        }

        for (Object orgId: orgids ) {
            String url = eduConfig.getApiServerUrl() + "/uop/v1/orgs/" + orgId;
            // { name ：部门名称, code : 部门编码 }
            JSONObject json = BaseHttpClientUtils.getToJSON(url , eduConfig.getApiKey(), null);
            if(json != null){
                JSONObject result = new JSONObject();
                result.put("name", json.getString("name")); //部门名称
                result.put("code", json.getString("code")); //部门编码
                array.add(result);
            }
        }
        return array;
    }

    /**
     * 获取用户信息条件
     * @param info
     */
    public  UserOrgs  getUserInfo(UserOrgs info){
        Map<String, Object> params = new HashMap<String, Object>();
        if(StringUtils.isNotBlank(info.getXgno())){ //学工号
            params.put("identity", info.getXgno());
        }

        if(StringUtils.isNotBlank(info.getCertificateNum())){ //身份证号
            params.put("certificateNum", info.getCertificateNum());
        }

        if(StringUtils.isNotBlank(info.getName())){ //姓名
            params.put("name", info.getName());
        }

        if(StringUtils.isNotBlank(info.getPhone())){ //电话
            params.put("phone", info.getPhone());
        }

        if(StringUtils.isNotBlank(info.getEmail())){ //电话
            params.put("email", info.getEmail());
        }

        // 数据模式(simple:简单模式，可选，不传该参数，返回所有有权限属性，如果为simple,返回：id,name,avatar,email,phone,workno,orgIds),
        // 如果为full,则返回多个分类下的所有用户信息,这种是针对应用绑定了具有相同模型的分类机构时,存在同一个属性有多个属性值的情况
        if(params.size() > 0){
            params.put("mode", "full");
        }


        String url = eduConfig.getApiServerUrl() + "/uop/v1/users"; //查询用户信息
        //发送请求
        JSONObject json = BaseHttpClientUtils.getToJSON(url
                , eduConfig.getApiKey(), params);

        if(json == null){
            return null;
        }
        UserOrgs user = new UserOrgs();
        JSONArray array = null;
        if(json.containsKey(CATALOG_STAFF_ON_THE_JOB)){
            array = json.getJSONArray(CATALOG_STAFF_ON_THE_JOB); //在职员工信息
            user.setXgtype(CATALOG_STAFF_ON_THE_JOB);
        }
        if(json.containsKey(CATALOG_STAFF_RETIREMENT) && (array == null || array.size()==0) ){
            array = json.getJSONArray(CATALOG_STAFF_RETIREMENT); //离退休
            user.setXgtype(CATALOG_STAFF_RETIREMENT);
        }
        if(json.containsKey(CATALOG_STUDENT_UNDERGRADUATE)  && (array == null || array.size()==0)){
            array = json.getJSONArray(CATALOG_STUDENT_UNDERGRADUATE); //本科生
            user.setXgtype("0");
        }else if(json.containsKey(catalog_student_graduate) && (array == null || array.size()==0)){
            array = json.getJSONArray(catalog_student_graduate); //研究生
            user.setXgtype("1");
        }

        if(array == null || array.size() == 0){
            return null;
        }

        JSONObject result = array.getJSONObject(0);

        user.setXgno(result.getString("xgno"));  //学工号
        user.setCertificateNum(result.getString("certificateNum")); //证件号码
        user.setCertificateType(result.getString("certificateType")); //证件类型
        user.setName(result.getString("name")); //姓名
        user.setEmail(result.getString("email")); //邮箱
        user.setPhone(result.getString("phone")); //手机
        user.setSex(result.getString("sex"));  //性别
        user.setAvatar(result.getString("avatar")); //头像

        List<String> orgIds = new ArrayList<String>();
        for(int i = 0; i < result.getJSONArray("orgIds").size(); i++){
            orgIds.add(result.getJSONArray("orgIds").getString(i));
        }

        user.setOrgIds(orgIds);  //机构信息

        user.setOrgInfoList(this.getOrgInfo(user.getOrgIds()));
        return user;
    }
}
